package nsu.edu.zsq.dao;

import java.util.List;
import nsu.edu.zsq.bean.Student;
import nsu.edu.zsq.bean.StudentExample;
import org.apache.ibatis.annotations.Param;

public interface StudentMapper {
    /**
     *
     */
    long countByExample(StudentExample example);

    /**
     *
     */
    int deleteByExample(StudentExample example);

    /**
     *
     */
    int deleteByPrimaryKey(Integer stuId);

    /**
     *
     */
    int insert(Student record);

    /**
     *
     */
    int insertSelective(Student record);

    /**
     *
     */
    List<Student> selectByExample(StudentExample example);

    /**
     *
     */
    Student selectByPrimaryKey(Integer stuId);

    /**
     *
     */
    int updateByExampleSelective(@Param("record") Student record, @Param("example") StudentExample example);

    /**
     *
     */
    int updateByExample(@Param("record") Student record, @Param("example") StudentExample example);

    /**
     *
     */
    int updateByPrimaryKeySelective(Student record);

    /**
     *
     */
    int updateByPrimaryKey(Student record);
    
    Student getByStuNo(@Param("stuNo") String stuNo);

    /**
     * 根据学生id，获取学生学籍信息，包括专业、班级等信息
     * @param stuId 学生id
     * @return Student
     */
    Student personalInfo(Integer stuId);

    /**
     * 通过课程代码获取该课程需要重修的学生（从stu_score表中查找）
     * @param courseNo 重修课程的课程代码
     * @return List<Student>
     */
    List<Student> listRetakeStudent(@Param("courseNo") String courseNo);

    /**
     * 获取该课程下的所有学生信息
     * @param tchCourseId 教师课程id
     * @return List<Student>
     */ 
    List<Student> listTeachClassStudent(int tchCourseId);

    /**
     * 获取该班级中需要补考的学生信息（即有课程成绩不及格的学生，从stu_score表中查）
     * @param classId 班级id
     * @return List<Student>
     */
    List<Student> listResitStudentByClassId(int classId);

    /**
     * 获取该班级中需要重修的学生信息（即有补考成绩不及格的学生，从stu_score表中查）
     * @param classId 班级id
     * @return List<Student>
     */
    List<Student> listRetakeStudentByClassId(int classId);
}